﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ubatic.Contracts.Contracts;
using Ubatic.Contracts.Services;
using Ubatic.Common.Dto;
using Ubatic.Ui.Web.Classes;
using Ubatic.Ui.Web.Code;

namespace Ubatic.Ui.Web.Pages
{
    public partial class ProyectosDetalle : BasePage
    {
        public Proyecto proyectoCurrent
        {
            get
            {
                return (Proyecto)ViewState["Proyecto"];
            }
            set
            {
                ViewState["Proyecto"] = value;
            }
        }

        ISecurityService SecurityService;
        IAdminProyectoService AdminProyectoService;
        Usuario usuario;

        protected void Page_Load(object sender, EventArgs e)
        {
            //HasPermissionToSeeMe(PlanProdSecurity.TEMPORADA_VER);

            try
            {
                SecurityService = ServiceFactory.GetSecurityService();
                AdminProyectoService = ServiceFactory.GetAdminProyectoService();
                usuario = SecurityService.GetUserByEmail(Context.User.Identity.Name);

                if (!this.IsPostBack)
                {
                    if (this.Request.QueryString["Id"] == null)
                    {
                        proyectoCurrent = new Proyecto();
                    }
                    else
                    {
                        proyectoCurrent = AdminProyectoService.GetProyecto(new ServiceOptions(), Convert.ToInt32(this.Request.QueryString["Id"]));
                    }

                    FillCombos();

                    Bind();
                }

                this.lnkSiguiente.Visible = proyectoCurrent.Id != default(int);                
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        private void FillCombos()
        {
            List<MaestroBase> convocatorias = AdminProyectoService.GetConvocatorias();
            UIHelper.LoadCbo(convocatorias, this.cboConvocatoria, string.Empty);

            List<MaestroBase> lineasDeTrabajo = AdminProyectoService.GetLineasDeTrabajo();
            UIHelper.LoadCbo(lineasDeTrabajo, this.cboLineaDeTrabajo, "Sin linea");

            List<MaestroBase> unidadesAcademicas = AdminProyectoService.GetUnidadesAcademicas();
            UIHelper.LoadCbo(unidadesAcademicas, this.lstUnidadAcademica, string.Empty);

            List<MaestroBase> areasDeConicimiento = AdminProyectoService.GetAreasDeConocimiento();
            UIHelper.LoadCbo(areasDeConicimiento, this.lstAreaConocimiento, string.Empty);

            List<MaestroBase> asignaturas = AdminProyectoService.GetAsignaturas();
            UIHelper.LoadCbo(asignaturas, this.lstAsignaturas, string.Empty);

            List<MaestroBaseCargo> cargos = AdminProyectoService.GetCargos();
            UIHelper.LoadCbo(cargos, this.cboCargo, "Sin cargo");

            List<MaestroBaseCargo> cargoCondiciones = AdminProyectoService.GetCargoCondicion();
            UIHelper.LoadCbo(cargoCondiciones, this.cboCargoCondicion, "Sin condición");

            List<MaestroBaseCargo> cargoDedicaciones = AdminProyectoService.GetCargoDedicaciones();
            UIHelper.LoadCbo(cargoDedicaciones, this.cboCargoDedicacion, "Sin dedicación");

            List<MaestroBaseCargo> tiposDeCargo = AdminProyectoService.GetTipoDeCargo();
            UIHelper.LoadCbo(tiposDeCargo, this.cboTipoDeCargo, "Sin tipo de cargo");            
        }

        //protected override void ApplySecurity()
        //{
        //    this.lnkGuardar.Visible = HasPermissionFor(PlanProdSecurity.TEMPORADA_EDITAR);
        //}

        private void Bind()
        {
            if (proyectoCurrent.Id != 0)
            {
                this.txtId.Text = Convert.ToString(proyectoCurrent.Id);
                cboConvocatoria.SelectedValue = proyectoCurrent.ConvocatoriaId.ToString();
                this.txtTitulo.Text = proyectoCurrent.Titulo;
                this.txtPresentacion.Text = proyectoCurrent.Presentacion;
                if (proyectoCurrent.LineaDetrabajoId.HasValue)
                {
                    this.cboLineaDeTrabajo.SelectedValue = proyectoCurrent.LineaDetrabajoId.Value.ToString();
                }

                foreach (ListItem item in lstUnidadAcademica.Items)
                {
                    item.Selected = this.proyectoCurrent.UnidadesAcademicasIds.Where(u => u.ToString() == item.Value).Count() == 1;
                }

                foreach (ListItem item in lstAreaConocimiento.Items)
                {
                    item.Selected = this.proyectoCurrent.AreaDeConocimientoIds.Where(u => u.ToString() == item.Value).Count() == 1;
                }

                foreach (ListItem item in lstAsignaturas.Items)
                {
                    item.Selected = this.proyectoCurrent.AsignaturasIds.Where(u => u.ToString() == item.Value).Count() == 1;
                }

                this.txtCreadorDelProyectoNombre.Text = proyectoCurrent.CreadorDelProyectoNombreYApellido;

                if (!String.IsNullOrEmpty(proyectoCurrent.CargoId))
                {
                    this.cboCargo.SelectedValue = proyectoCurrent.CargoId;
                }
                else
                {
                    this.cboCargo.SelectedValue = UIHelper.cboNullValue;
                }

                if (!String.IsNullOrEmpty(proyectoCurrent.CargoDedicacionId))
                {
                    this.cboCargoDedicacion.SelectedValue = proyectoCurrent.CargoDedicacionId;
                }
                else
                {
                    this.cboCargoDedicacion.SelectedValue = UIHelper.cboNullValue;
                }

                if (!String.IsNullOrEmpty(proyectoCurrent.CargoCondicionId))
                {
                    this.cboCargoCondicion.SelectedValue = proyectoCurrent.CargoCondicionId;
                }
                else
                {
                    this.cboCargoCondicion.SelectedValue = UIHelper.cboNullValue;
                }

                if (!String.IsNullOrEmpty(proyectoCurrent.TipoDeCargoId))
                {
                    this.cboTipoDeCargo.SelectedValue = proyectoCurrent.TipoDeCargoId;
                }
                else
                {
                    this.cboTipoDeCargo.SelectedValue = UIHelper.cboNullValue;
                }
            }
            else
            {
                this.txtCreadorDelProyectoNombre.Text = usuario.Nombre + " " + usuario.Apellido;
            }
        }

        private void SetData()
        {
            if (!String.IsNullOrEmpty(this.txtId.Text))
            {
                proyectoCurrent.Id = Convert.ToInt32(this.txtId.Text);
            }          

            proyectoCurrent.ConvocatoriaId = UIHelper.GetIntFromInputCbo(cboConvocatoria).Value;
            proyectoCurrent.Titulo = this.txtTitulo.Text;
            proyectoCurrent.Presentacion = this.txtPresentacion.Text;
            proyectoCurrent.LineaDetrabajoId = UIHelper.GetIntFromInputCbo(cboLineaDeTrabajo);
            proyectoCurrent.UnidadesAcademicasIds = UIHelper.GetIntListFromInputCbo(lstUnidadAcademica);
            proyectoCurrent.AreaDeConocimientoIds = UIHelper.GetIntListFromInputCbo(lstAreaConocimiento);
            proyectoCurrent.AsignaturasIds = UIHelper.GetIntListFromInputCbo(lstAsignaturas);

            if (this.proyectoCurrent.CreadorDelProyectoId == default(int))
            {
                this.proyectoCurrent.CreadorDelProyectoId = usuario.Id;
                proyectoCurrent.CreadorDelProyectoNombreYApellido = usuario.Nombre + " " + usuario.Apellido;
            }

            proyectoCurrent.CargoId = UIHelper.GetStringFromInputCbo(cboCargo);
            proyectoCurrent.CargoDedicacionId = UIHelper.GetStringFromInputCbo(cboCargoDedicacion);
            proyectoCurrent.CargoCondicionId = UIHelper.GetStringFromInputCbo(cboCargoCondicion);
            proyectoCurrent.TipoDeCargoId = UIHelper.GetStringFromInputCbo(cboTipoDeCargo);                       
        }

        private void Save()
        {
            proyectoCurrent = AdminProyectoService.SaveProyectoDatosGenerales(proyectoCurrent);
        }

        private bool Validar()
        {
            //if (temporadaCurrent.FechaDesde > temporadaCurrent.FechaHasta)
            //{
            //    this.masterPage.ShowMessage("La fecha desde debe ser menor a la fecha hasta", WebMessageType.Error);
            //    return false;
            //}

            return true;
        }

        protected void lnkGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                SetData();
                if (Validar())
                {
                    Save();                    
                }

                ShowMessage("Los datos fueron grabados con éxito", WebMessageType.Notification);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        
        protected void lnkSiguiente_Click(object sender, EventArgs e)
        {
            try
            {
                Response.Redirect(string.Format("/Pages/ProyectrosDetalleMiembrosEquipo.aspx?Id={0}", proyectoCurrent.Id), true);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void lnkCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                Response.Redirect("/Pages/ProyectosListado.aspx", true);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }       
    }
}